declare namespace API.Scene {
  interface CreateSceneResp {
    activityId: string;
  }
  interface SceneListItem {
    organizeId: string;
    activityId: string;
    projectId?: any;
    userId: string;
    activityName: string;
    actDesp: string;
    actCover?: any;
    actViewAngle?: any;
    lastTime: string;
    releState: boolean;
    logicMark: number;
  }

  interface Scene {
    organizeId: string;
    activityId: string;
    projectId?: any;
    userId: string;
    activityName: string;
    actDesp: string;
    conifgId?: any;
    configJson?: any;
    actCover?: any;
    actViewAngle?: any;
    lastTime: string;
    latitude: any;
    longitude: any;
    xRotate: any;
    yRotate: any;
    zRotate: any;
  }

  interface Map {
    mapId?: number;
    index?: number;
    type: string;
    name: string;
    source: string;
    dataSourceUrl: string;
    icon?: string;
    maximumLevel?: number;
    minimumLevel?: number;
    enable: boolean;
    contrast: number;
    saturation: number;
    brightness: number;
    hue: number;
    gamma: number;
    extra?: any;
    config?: any;
  }

  interface Terrain {
    mapId: number;
    type: string;
    name: string;
    enable: boolean;
    extra?: any;
  }

  interface GetSceneDetailParams {
    activityId: string;
  }

  type LayerType =
    | 'custom'
    | 'imageLayer'
    | 'gltfmodel'
    | 'div'
    | 'entity'
    | 'marker'
    | 'drawlabel'
    | 'road'
    | 'regionEffect'
    | 'building'
    | 'fake_particleSystem'
    | 'osgb'
    | 'point'
    | 'polyline'
    | 'polygon'
    | 'bimModel'
    | 'folder'
    | 'image'
    | 'terrain'
    | 'tileset';

  type LayerActualType = 'gltfmodeleffect';

  export interface ILayerEffectRequest {
    method: string;
    url: string;
    ticket: string;
    data: string;
    refrush: number;
    isRefrush: boolean;
  }

  export interface ILayerEffect {
    dataType: string; // 数据类型
    request: ILayerEffectRequest;
    fieldDef: any;
    dataMapping: any;
    requestData: any[];
    list: any[]; // 判定器列表
    deviceCode: string;
    moduleName: string;
  }

  interface ILayer {
    code: string;
    show: boolean;
    json: any;
    name: string;
    layerName: string;
    desc: string;
    type: LayerType;
    actualType?: LayerActualType;
    attr?: any;
    effect?: ILayerEffect;
    extra?: any;
  }

  interface IVersion {
    organizeId: string;
    activityId: string;
    userId: string;
    conifgId: string;
    configJson: string;
    createTime: string;
  }

  // 特效列表返回值
  interface IEffectItem {
    organizeId: string;
    effectId: string;
    effectType: number;
    type?: string;
    effectName: string;
    effDesp: string;
    effCover: string;
    quoteUrl: string;
    configJson: string;
    createTime: string;
    logicMark: number;
    popover?: boolean;
  }

  // 分享列表出参
  interface IShareListItem {
    createBy: string;
    createTime: string;
    updateBy: string;
    updateTime: string;
    id: number;
    shareCode: string;
    projectName: string;
    shareName: string;
    shareType: string;
    shareStatus: number;
    appId: string;
    resourceCode?: any;
    accessTimes: number;
    accessPassword: string;
    expirationTime?: any;
    isDelete: number;
  }

  // 创建分享入参
  interface ICreateSceneShareParam {
    accessPassword: string;
    accessTimes: string;
    appId: string;
    expirationTime: string;
    isDelete: number;
    projectName: string;
    resourceCode: string;
    shareCode: string;
    shareName: string;
    shareStatus: number;
    shareType: string;
  }
}
